package org.gl.logic;

import java.awt.Color;
import java.util.Date;
import java.util.Random;

import org.gl.obj.GLMap;

public class Rule02Logic extends GLMapLogic {

	private int start;
	private int handicap;
	private int darkLimit;
	
	public Rule02Logic(int start, int handicap, int darkLimit) {
		this.start = start;
		this.handicap = handicap;
		this.darkLimit = darkLimit;
	}
	
	@Override
	public void update(GLMap map) {
		GLMap temp = new GLMap(1, 1);
		temp.copy(map);
		for(int x = 1; x < map.getSizeX()-1; x++) {
			for(int y = 1; y < map.getSizeY()-1; y++) {
				int count = 0;
				int g = map.get(x, y).getGreen();
				if(g < map.get(x-1, y-1).getGreen()) count++; 
				if(g < map.get(x-1, y).getGreen()) count++; 
				if(g < map.get(x-1, y+1).getGreen()) count++; 
				if(g < map.get(x, y-1).getGreen()) count++; 
				if(g < map.get(x, y+1).getGreen()) count++; 
				if(g < map.get(x+1, y-1).getGreen()) count++; 
				if(g < map.get(x+1, y).getGreen()) count++; 
				if(g < map.get(x+1, y+1).getGreen()) count++; 
				
				if(count > g/30) {
					g += count;
					if(g > 255) g = 255;
				} else {
					g -= handicap;
					if(g <= darkLimit) g = start;
				}
				
				temp.set(x, y, new Color(0, g, 0));
			}
		}
		map.copy(temp);
	}
	
	@Override
	public void generateRandomSet(GLMap map) {
		Random r = new Random(new Date().getTime());
		for(int x = 0; x < map.getSizeX(); x++) {
			for(int y = 0; y < map.getSizeY(); y++) {
				map.set(x, y, new Color(0, r.nextInt(255), 0));
			}
		}
	}
}
